package com.company.algo.huawei;

import java.util.Arrays;
import java.util.Scanner;

/**
 输入：4(可选位置数量,下一行的数字个数) 3(相距最远的两名特工间的距离的最大值)
        1 2 3 4
 输出可选方案 (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)
 选定3个埋伏地点
 */
public class enumulateLoc {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int D = sc.nextInt();
        int[] nums = new int[N];
        for(int i =0 ;i < N ; i++){
            nums[i]=sc.nextInt();
        }
        System.out.println(permutation(nums,D));
    }


    private static long permutation(int[] nums, int D) {
        Arrays.sort(nums);
        long count = 0;
        //i作为锚点，从[j,i-1]选出两个其他元素
        for (int i = 2, j=0; i < nums.length; i++) {
            while (nums[i]-nums[j]>D){
                j++;
            }
            count += C(i-j);
        }
        return count % 99997867;    //最后结果可能溢出，所以对count取模
    }
    //求组合C(n，2)
    static long C(int n){
        if (n<0) return 0;
        return (n-1)*n/2;
    }
}
